package ASAExpression;

import application.FunctionStack;
import application.Memory;
import exceptions.ExecutionException;

/**
 * Classe representant l'incrémentation 
 * d'une variable
 * @author D.romain
 * @author O.riad
 */
public class ASAIncrement extends ASAExpr {

    private ASAVariable e1;
    
    /**
     * Contructeur prenant en paramètre
     * la variable à décrementer
     * @param e1 Variable
     */
    public ASAIncrement(ASAVariable e1){
        this.e1 = e1;
    }
    
    /**
     * Retourne l'expression (Variable)
     * @return ASAExpr
     */
    @Override
    public ASAExpr getExpr1() {
        return e1;
    }

    /**
     * NON IMPLEMENTEE
     * @return null
     */
    @Override
    public ASAExpr getExpr2() {
        return null;
    }
    
    /**
     * Evalue l'expression en incrémentant la
     * variable de 1 (+ gestion de la mémoire)
     * @return valeur incrementée 
     */
    @Override
    public int evalue() throws ExecutionException {
        int inc = e1.evalue()+1;
        Memory.add(FunctionStack.getExecCurrentFunction(), this.e1.getVariableName(), inc);
        return inc;
    }

    /**
     * Permet l'affichage de l'incrémentation
     * @return String valeur incrémentée
     */
    @Override
    public String getLabelExplorateur() throws ExecutionException {
        return "INCREMENT " + this.evalue();
    }
    
}
